package com.huike.pmps.model.vo;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;


/**
 * 作者：谌贵斌(黑桃K)
 * 日期: 2888-08-08
 * 老师QQ: 272488352
 * 官方QQ交流群: 377748272
 * 刀客程序员官网：http://www.daoke360.com
 * 刀客程序员淘宝旗舰店：https://daoke360.taobao.com/
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(value="Result", description="API统一返回的结果类型")
public class Result implements Serializable {

    @ApiModelProperty(value="成功标记", name="flag", example="true")
    private boolean flag;//是否成功 true 成功   false 失败
    @ApiModelProperty(value="响应状态码", name="code", example="200")
    private int code; // 返回码
    @ApiModelProperty(value="响应提示消息", name="message", example="操作成功")
    private String message; //返回信息
    private Object data; // 返回数据

    public Result(boolean flag, int code, String message) {
        this.flag = flag;
        this.code = code;
        this.message = message;
    }

    /**
     * 处理成功,直接返回
     *
     * @return
     */
    public static Result success() {
        return new Result(true, StatusCode.OK, "操作成功", null);
    }

    /**
     * 处理成功,设置消息后返回，不带数据
     *
     * @return
     */
    public static Result success(String message) {
        return new Result(true, StatusCode.OK, message, null);
    }

    /**
     * 处理成功,带数据返回
     *
     * @return
     */
    public static Result success(Object data) {
        return new Result(true, StatusCode.OK, "操作成功", data);
    }

    /**
     * 处理成功,添加消息后，带数据返回
     *
     * @return
     */
    public static Result success(String message, Object data) {
        return new Result(true, StatusCode.OK, message, data);
    }

    /**
     *  处理失败，添加失败消息后返回
     *
     * @return
     */
    public static Result failure(String message) {
        return new Result(false, StatusCode.FAIL_403, message, null);
    }

    /**
     * 处理失败，带状态码和消息返回
     *
     * @return
     */
    public static Result failure(int code, String message) {
        return new Result(false, code, message, null);
    }

    /**
     * 操作发生异常,直接返回
     * @return
     */
    public static Result error(){
        return new Result(false, StatusCode.ERROR, "操作发生异常", null);
    }

    /**
     * 操作发生异常,带失败消息返回
     * @return
     */
    public static Result error(String errMsg){
        return new Result(false, StatusCode.ERROR, errMsg, null);
    }
}
